home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 15 / Amiga Plus Leser CD 15.iso / Tools / Development / PluginSRC_EvenMore / macword2text.e < prev    next >
Encoding:
Text File  |  2002-03-13  |  2.7 KB  |  141 lines

  1. /*
  2.    MacWord2Text
  3.    EvenMore FileIO plugin
  4.    Author: Chris Perver
  5.    Copyright (c) 2001
  6. */
  7.  
  8.  
  9. OPT REG=5
  10.  
  11. LIBRARY 'macword2text.plugin',1,1,'MacWord2Text 1.01' IS em_main, em_end, em_info, em_pluginid, em_begin, em_format
  12.  
  13. MODULE 'tools/ctype', '*epo'
  14.  
  15. DEF vers, mem2, len2, startchar, endchar
  16.  
  17.  
  18. PROC em_isdatatype(memadr, lenadr)
  19.    DEF vers = 0
  20.    DEF w:PTR TO LONG
  21.  
  22.  
  23.    -> Check for FORM header
  24.  
  25.    w := Long(memadr + 65)
  26.  
  27.    SELECT w
  28.      CASE "WDBN"
  29.        vers := 1
  30.        startchar := $ca
  31.        endchar   := $0c
  32.      CASE "W6BN"
  33.        vers := 2
  34.        startchar := $ca
  35.        endchar   := $00
  36. /*     CASE "TEXT"
  37.        vers := 3
  38.        startchar := $0d
  39.        endchar   := $11     */
  40.    ENDSELECT
  41.  
  42.    IF vers > 0
  43.      w := Long(memadr + 69)
  44.      IF w <> "MSWD" THEN vers := 0
  45.    ELSE
  46.      vers := 0
  47.    ENDIF
  48. ENDPROC vers
  49.  
  50.  
  51. PROC em_parsedata(memadr, lenadr)
  52.   DEF count = 0, count2 = 0
  53.   DEF wrapping = 80, notdonewrapping = TRUE, currchar = 0
  54.   DEF notdone = TRUE
  55.   -> Allocate memory for file
  56. ->  IF (mem2 := New(lenadr + 1)) = NIL THEN RETURN -1
  57. ->  mem2[lenadr + 1] := "\n"                                                      -> Put safety LF at the end of mem
  58. ->  DEF w:PTR TO LONG
  59. ->  DEF iswtxt = FALSE
  60.  
  61.   DEF c
  62.  
  63.   mem2 := memadr
  64.  
  65.    -> SKIP UNTIL WE GOT SOME TEXT
  66.    WHILE memadr[count] <> startchar DO INC count
  67.    INC count
  68. ->   IF vers < 3 THEN INC count ELSE count := count + 3
  69.  
  70.    WHILE notdone AND (count < lenadr)
  71.      IF (currchar >= wrapping)
  72.        WHILE notdonewrapping
  73.          IF isspace(memadr[count]) = FALSE
  74.            DEC count
  75.            DEC count2
  76.          ELSE
  77.            notdonewrapping := FALSE
  78.          ENDIF
  79.        ENDWHILE
  80.        INC count
  81.  
  82.        currchar := 0
  83.        mem2[count2++] := "\n"
  84.        notdonewrapping := TRUE
  85.      ENDIF
  86.  
  87.      SELECT 256 OF c:=memadr[count]
  88.        CASE "\b"
  89.          mem2[count2++] := memadr[count++]
  90.          currchar := 0
  91.        DEFAULT
  92.          IF c = endchar
  93.            DEC count2
  94.            notdone := FALSE
  95.          ELSE
  96.            mem2[count2++] := memadr[count++]
  97.            INC currchar
  98.          ENDIF
  99.      ENDSELECT
  100.  
  101.  
  102.    ENDWHILE
  103.  
  104.  
  105.   mem2[count2] := "\n"
  106.  
  107.  -> IF memadr
  108.  ->   Dispose(memadr); memadr := NIL
  109.  -> ENDIF
  110. ENDPROC mem2, count2
  111. -><
  112.  
  113. -> *** STANDARD PROCS FOR PLUGINS
  114.  
  115.  
  116. PROC em_main(epo:PTR TO em_pluginobj)
  117.     mem2, len2 := em_parsedata(epo.buffer, epo.length)
  118.     epo.buffer := mem2
  119.     epo.length := len2
  120.     RETURN TRUE
  121. ENDPROC
  122.  
  123. PROC em_begin(epo:PTR TO em_pluginobj)
  124.   vers := em_isdatatype(epo.buffer, epo.length)
  125.   IF vers
  126.     RETURN TRUE
  127.   ELSE
  128.     RETURN FALSE
  129.   ENDIF
  130. ENDPROC
  131.  
  132. PROC em_end()      IS EMPTY
  133.  
  134. PROC em_info()     IS 'MacWord2Text 1.01'
  135.  
  136. PROC em_pluginid() IS "FILE"
  137.  
  138. PROC em_format()   IS 'MacWord'
  139.  
  140. PROC main()        IS EMPTY
  141.